package com.atguigu.lease.admin.controller.apartment;

import com.atguigu.lease.admin.service.FileService;
import com.atguigu.lease.common.result.Result;
import com.atguigu.lease.common.result.ResultCodeEnum;
import com.atguigu.lease.common.util.FileType;
import com.atguigu.lease.common.util.FileUtil;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

@Tag(name = "文件管理模块")
@RestController
@RequestMapping("/admin/file")
public class FileController {
    @Autowired
    FileService fileService;
    /*
        前端提交文件-> 后端接受文件
                    保存文件：  以后会涉及文件的 访问、权限控制、删除、修改、文件隔离
                            可以使用第三方的系统来管理文件：
                                本地搭建：minio  公司有自己的服务器 可以自己使用minio管理文件
                                        > 我们已经安装了minio 并且添加为了linux的服务
                                            systemctl start/stop/restart/disable/status minio
                                云服务器：OSS对象存储（阿里云  腾讯云）  收费
         前端接受到响应的图片地址 可以渲染到页面中 <--将保存文件的url地址返回
     */

    @Operation(summary = "图片上传")
    @PostMapping("/upload")
    public Result<String> upload(@RequestParam("file") MultipartFile file) throws IOException {
        //校验文件：防止恶意文件上传(原理：校验上传文件的 数据流的头，如果是常见数据格式的头 允许上传 否则拒绝)
        FileType fileType = FileUtil.getType(file.getInputStream());
        if(fileType==null){
            //上传文件的格式不是我们允许的格式，拒绝本次请求
            return Result.error(ResultCodeEnum.UPLOAD_DATA_ERROR);
        }

        String url = fileService.upload(file);
        return Result.ok(url);
    }
}
